package com.smartmedical.system.patient.service;

import com.smartmedical.common.core.domain.HealthR;
import com.smartmedical.system.api.domain.PatientUsers;


import com.smartmedical.system.patient.domain.dto.PatientIserArchivesDto;
import com.smartmedical.system.patient.domain.dto.PatientUserIdCardDto;
import com.smartmedical.system.patient.domain.entity.PatientSystemNoticeEntity;
import com.smartmedical.system.patient.domain.entity.PatientUserConsumptionRecordEntity;
import com.smartmedical.system.patient.domain.entity.PatientUserEntity;
import com.smartmedical.system.patient.domain.entity.PatientUserWalletEntity;
import com.smartmedical.system.patient.domain.vo.*;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface PatientUserService {
    PatientUsers login(String email);




    HealthR sendOutEmailCode(String email);


    HealthR registerUser(String email, String code, String pwd1, String pwd2, String invitationCode);

    UserInfoByIdVo UserInfoById(Long id);

    void perfectUserInfo(Integer age, Integer height, Integer weight, Long id);

    HealthR uploadHeadPic(MultipartFile image);

    void addUserArchives(PatientIserArchivesDto patientIserArchivesDto);

    HealthR uploadArchivesPicture(String[] picture, Long archivesId);


    HealthR<PatientIserArchivesVo> findUserArchives(Long userId);

    void addSign(Long userId);

    HealthR<List<PatientUserConsumptionRecordEntity>> whetherSignToday(Long userId);

    HealthR<List<PatientUserConsumptionRecordEntity>> whetherSignTodays(Long userId);

    void updateUserInfo(Integer sex, Long userId);

    void updateUserNickName(String nickName, Long userId);

    void makeInvitationCode(Long userId);

    HealthR<List<PatientUserEntity>> findUserInvitationCode(Long userId);

    void updateUserPwd(String oldPwd, String newPwd, Long userId);

    void addPushToken(String token, Long userId);

    void doTask(Integer taskId, Long userId);


    HealthR<UserTaskRecordVo> findUserTaskList(Long userId);

    void receiveReward(Integer taskId, Long userId);

    void updateArchives(PatientIserArchivesDto archives);

    void deleteArchives(Integer archivesId);

    HealthR addInfoCollection(Integer infoId);

    HealthR<List<PatientInfoVo>> findInfoCollections();

    void cancelInfoCollection(Integer infoId);

    HealthR<List<PatientVideoVo>> findVideoCollectionList(Integer page, Integer count);

    void cancelVideoCollection(Integer videoId);

    HealthR<List<PatientUserDoctorVo>> findUserDoctorFollowList(@RequestParam Integer page, @RequestParam  Integer count);

    HealthR<List<PatientUserVideoVo>> findUserVideoBuyList(Integer page, Integer count);

    void deleteVideoBuy(Integer videoId);

    HealthR<List<ConsumptionRecordVo>> findUserConsumptionRecordList(Integer page, Integer count);

    HealthR<PatientUserWalletEntity> findUserWallet(Long userId);

    HealthR checkCode(String email, String code);

    void resetUserPwd(String email, String pwd1, String pwd2);

    HealthR<List<PatientNoticeVo>> findSystemNoticeList(Integer page, Integer count);

    HealthR<List<PatientInquiryNoticeVo>> findInquiryNoticeList(Integer page, Integer count);

    HealthR<List<CurrencyNoticeVo>> findHealthyCurrencyNoticeList(Integer page, Integer count);

    void bindUserBankCard(String bankCardNumber, String bankName, String bankCardType);

    HealthR<PatientBankCardInfoVo> findUserBankCardByUserId(Long userId);

    void bindUserIdCard(PatientUserIdCardDto patientUserIdCardDto);

    HealthR<PatientUserIdCardVo> findUserIdCard(Long userId);

    HealthR<List<PatientUserDrawRecordVo>> findUserDrawRecordList(Integer page, Integer count);

    void drawCash(Integer money, Long userId);

    void watchInfoRewards(Integer infoId, Long userId);


    List<PatientSystemNoticeEntity> findUserNoticeReadNum();

    void modifyAllStatus(Long userId);

    HealthR<String> userHealthTest();

}
